const ak = 'P9lw9BXDplmIA3SR2dhujRR6WM9hlmBE' // 前往lbsyun.baidu.com申请
const EARTH_CIRCUMSTANCE = 40075000; // 地球赤道周长（米）
const TILE_SIZE = 256;               // 瓦片尺寸（像素）

Page({
  data:{
    markers: [],
    polyline: [],
    startPoint: { latitude: 29.557940, longitude: 103.772538 }, // 起点A
    endPoint: { latitude: 38.879988, longitude: 115.471464 },     // 终点B
    centerLat: 34.341, // 默认中心点（会被计算覆盖）
    centerLng: 108.939,
    scale: 10,          // 默认缩放级别
  },

  onLoad() {
    this.requestRoute();
  },

  // 发起路径规划请求(已用)
  requestRoute() {
    wx.request({
      url: 'https://api.map.baidu.com/direction/v2/driving',
      data:{
        ak: ak,
        origin: `${this.data.startPoint.latitude},${this.data.startPoint.longitude}`,
        destination: `${this.data.endPoint.latitude},${this.data.endPoint.longitude}`,
        coord_type: 'bd09ll', // 指定返回坐标类型
        ret_coordtype: 'bd09ll',
        tactics_incity: 0,    // 0-推荐路线
        output: 'json'
      },
      success: res => {
        if (res.data.status === 0) {
          this.processRouteData(res.data.result);
        } else {
          console.error('API错误:', res.data);
        }
      }
    });
  },

  // 处理返回的路线数据(已用)
  processRouteData(result) {
    const route = result.routes[0];
    
    // 1. 获取原始路径点（包含去重和过滤）
    let points = [];
    route.steps.forEach(step => {
      const stepPoints = step.path.split(';')
        .map(p => {
          const [lng, lat] = p.split(',');
          return { 
            latitude: parseFloat(lat), 
            longitude: parseFloat(lng)
          };
        })
        .filter(p => this.isValidCoordinate(p)); // 过滤无效坐标
      
      // 去除首尾重复点
      if (points.length > 0 && stepPoints.length > 0) {
        const last = points[points.length - 1];
        const first = stepPoints[0];
        if (last.latitude === first.latitude && last.longitude === first.longitude) {
          stepPoints.shift();
        }
      }
      points.push(...stepPoints);
    });

    // 2. 强制包含起终点（防止API遗漏）
    points = [
      this.data.startPoint,
      ...points,
      this.data.endPoint
    ].filter((p, i, arr) => 
      // 去重：避免重复添加相同坐标
      i === arr.findIndex(item => 
        item.latitude === p.latitude &&
        item.longitude === p.longitude
      )
    );

    // 3. 计算地理边界（包含所有有效点）
    // const lats = points.map(p => p.latitude);
    // const lngs = points.map(p => p.longitude);
    // const bounds = {
    //   minLat: Math.min(...lats),
    //   maxLat: Math.max(...lats),
    //   minLng: Math.min(...lngs),
    //   maxLng: Math.max(...lngs)
    // };
    const bounds = this.validateBounds(points)
    // 4. 精确中心点计算（考虑地理权重）
    const center = this.calculateGeoCenter(points);

    // 5. 动态缩放级别计算
    // const scale = this.calculateZoomLevel(bounds);
    const baseZoom = this.calculateZoomLevel(bounds);
    const finalZoom = baseZoom - 5.5; // 精确中间值
    // 6. 更新视图
    this.setData({
      center,
      scale: Math.min(Math.max(finalZoom, 3), 20), // 限制在3-20级
      polyline: [{
        points: points,
        color: '#09BB07',
        width: 3,
        arrowLine: true
      }],
      includePoints: [
        { latitude: bounds.minLat, longitude: bounds.minLng },
        { latitude: bounds.maxLat, longitude: bounds.maxLng }
      ]
    });
  },

  // 坐标有效性验证(已用)
  isValidCoordinate(point) {
    return !isNaN(point.latitude) && 
          !isNaN(point.longitude) &&
          point.latitude >= -90 &&
          point.latitude <= 90 &&
          point.longitude >= -180 &&
          point.longitude <= 180;
  },

  // 地理权重中心计算(已用)
  calculateGeoCenter(points) {
    const total = points.length;
    let x = 0, y = 0, z = 0;

    points.forEach(p => {
      const latRad = p.latitude * Math.PI / 180;
      const lngRad = p.longitude * Math.PI / 180;
      
      x += Math.cos(latRad) * Math.cos(lngRad);
      y += Math.cos(latRad) * Math.sin(lngRad);
      z += Math.sin(latRad);
    });

    x /= total;
    y /= total;
    z /= total;

    const centerLng = Math.atan2(y, x) * 180 / Math.PI;
    const hyp = Math.sqrt(x * x + y * y);
    const centerLat = Math.atan2(z, hyp) * 180 / Math.PI;

    return { latitude: centerLat, longitude: centerLng };
  },

  // 动态缩放级别计算(已用)
  calculateZoomLevel(bounds) {
    const latSpan = bounds.maxLat - bounds.minLat;
    const lngSpan = bounds.maxLng - bounds.minLng;
    
    // 返回带小数的原始缩放级别（如12.7）
    if (latSpan > 2 || lngSpan > 2) return 10.5;    // 半级缓冲
    if (latSpan > 0.5 || lngSpan > 0.5) return 12.3;
    if (latSpan > 0.1 || lngSpan > 0.1) return 14.8;
    return 16.0;
  },

  // 新增边界校验方法(已用)
  validateBounds(points) {
    const MARGIN = 0.0002; // 约20米缓冲
    
    return {
      minLat: Math.min(...points.map(p => p.latitude)) - MARGIN,
      maxLat: Math.max(...points.map(p => p.latitude)) + MARGIN,
      minLng: Math.min(...points.map(p => p.longitude)) - MARGIN,
      maxLng: Math.max(...points.map(p => p.longitude)) + MARGIN
    };
  },
    
  // 创建标记点
  // createMarker(point, title) {
  //   return {
  //     id: Date.now(),
  //     latitude: point.latitude,
  //     longitude: point.longitude,
  //     // iconPath: '/images/marker.png', // 自定义图标
  //     width: 32,
  //     height: 32,
  //     callout: {
  //       content: title,
  //       color: '#FFFFFF',
  //       bgColor: '#09BB07',
  //       borderRadius: 4,
  //       padding: 8
  //     }
  //   };
  // },
  zoomIn() {
    const newScale = Math.min(this.data.scale + 1, 20); // 最大缩放级别20
    this.setData({ scale: newScale });
  },
  
  zoomOut() {
    const newScale = Math.max(this.data.scale - 1, 3); // 最小缩放级别3
    this.setData({ scale: newScale });
  },

  // 地图区域变化监听（调试用）
  // onMapRegionChange(e) {
  //   console.log('当前地图范围:', e.detail);
  // },

  // 创建标记点（增加防抖）
  // createMarker: (function() {
  //   let lastMarkerId = 0;
  //   return function(point, title) {
  //     return {
  //       id: ++lastMarkerId,
  //       latitude: point.latitude,
  //       longitude: point.longitude,
  //       // iconPath: '/images/marker.png',
  //       width: 32,
  //       height: 32,
  //       anchor: { x: 0.5, y: 1 },
  //       callout: {
  //         content: title,
  //         color: '#FFFFFF',
  //         bgColor: '#09BB07',
  //         borderRadius: 4,
  //         padding: 8
  //       }
  //     };
  //   };
  // })(),

  // 点击地图查看当前视野范围(已用页面)
  onMapTap() {
    const mapContext = wx.createMapContext('bmap', this);
    mapContext.getRegion({
      success: res => {
        console.log('当前地图视野范围:', {
          northeast: res.northeast,
          southwest: res.southwest
        });
      }
    });
  },

    // 新增强制重绘方法
    // forceRedraw() {
    //   const temp = this.data.scale;
    //   this.setData({ scale: temp - 0.0001 }); // 微调触发重绘
    //   setTimeout(() => this.setData({ scale: temp }), 50);
    // },


});
